package initialize

import (
	"k8soperation/global"
	"k8soperation/internal/pkg/setting"
)

// SetupSetting 初始化全局配置
// 1. 创建 viper 实例（读取配置文件）
// 2. 将配置文件中 "Server" 部分映射到 global.Setting
func SetupSetting() error {
	// 1. 创建一个 Setting 对象（内部封装了 viper 配置读取）
	s, err := setting.NewSetting()
	if err != nil {
		// 如果读取配置文件失败，直接返回错误
		return err
	}

	// 2. 从配置文件中读取 "Server" 这一节的数据
	//    并将解析结果反序列化到 global.Setting 结构体指针中
	//    - 第一个参数 "Server" 是配置文件中的 key
	//    - 第二个参数 global.ServerSetting 是接收配置的结构体指针
	if err = s.ReadSection("Server", &global.ServerSetting); err != nil {
		return err
	}

	// 加载应用配置
	if err := s.ReadSection("App", &global.AppSetting); err != nil {
		return err
	}

	// 3. 读取 Database 配置
	if err = s.ReadSection("Database", &global.DatabaseSetting); err != nil {
		return err
	}

	// 3. 成功则返回 nil，表示初始化完成
	return nil
}
